/**
* reverse() 方法就地反转数组中的元素，并返回同一数组的引用。
数组的第一个元素会变成最后一个，数组的最后一个元素变成第一个。
换句话说，数组中的元素顺序将被翻转，变为与之前相反的方向。

要在不改变原始数组的情况下反转数组中的元素，使用 toReversed()。 
 * @returns 翻转后的原数组

 */
Array.prototype.myReverse = function () {
  if (!Array.isArray(this)) {
    throw new TypeError("must be called by array");
  }

  if (this.length < 2) return this;
  // 二分法
  const middleIndex = Math.ceil(this.length / 2);

  for (let i = 0; i < middleIndex; i++) {
    // 数组解构方式交换值
    [this[i], this[this.length - i - 1]] = [this[this.length - 1], this[i]];
  }

  return this;
};

// egg
const arr = [1, 2, 3, 4];
console.log("[ arr ] >", arr.myReverse());

const arr1 = [1, 2, 3, 4];

console.log("[ arr1 ] >", arr1.reverse());
